﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Domain.Model.Services;
using Domain.Model.SecretariasDeTransito;
using Domain.Model.Repositories;
using Domain.Model.Aggregates;
using Domain.Model.Direcciones;

namespace Domain.Model.Entidades.SecretariaDeTransitos
{
    public class SecretariaDeTransitoService: ISecretariaDeTransitoService
    {
        /// Referencia al servicio de SecretariaDeTransitos
        private SecretariaDeTransitoRepository secretariaDeTransitoRepository;


        //Constructor
        public SecretariaDeTransitoService(SecretariaDeTransitoRepository secretariaDeTransitoRepository)
        {
            if (secretariaDeTransitoRepository == null)
            {
                throw new ArgumentNullException("secretariaDeTransitoRepository");
            }
            this.secretariaDeTransitoRepository = secretariaDeTransitoRepository;
        }

        public SecretariaDeTransito SecretariaDeTransitoFromId(string SecretariaDeTransitoId)
        {
            return this.secretariaDeTransitoRepository.FromId(new SecretariaDeTransitoId(SecretariaDeTransitoId));
        }

        public SecretariaDeTransitoId CreateSecretariaDeTransito(String nit, String razonSocial, Direccion direccion)
        {
            SecretariaDeTransito newSecretariaDeTransito;
            newSecretariaDeTransito = SecretariaDeTransitoAggregate.CreateSecretariaDeTransito((SecretariaDeTransitoId)secretariaDeTransitoRepository.NextIdentity(), nit,razonSocial,direccion);
            this.secretariaDeTransitoRepository.Insert(newSecretariaDeTransito);
            return (SecretariaDeTransitoId)newSecretariaDeTransito.Identity;
        }


        public List<SecretariaDeTransito> AllSecretariaDeTransito()
        {
            return this.secretariaDeTransitoRepository.All();
        }


        public void RemoveSecretariaDeTransito(SecretariaDeTransitoId SecretariaDeTransitoId)
        {
            this.secretariaDeTransitoRepository.Remove(SecretariaDeTransitoId);
        }


        public SecretariaDeTransitoId EditSecretariaDeTransito(SecretariaDeTransitoId SecretariaDeTransitoId, String nit, String razonSocial, Direccion direccion)
        {
            SecretariaDeTransito newSecretariaDeTransito;
            newSecretariaDeTransito = SecretariaDeTransitoAggregate.CreateSecretariaDeTransito(SecretariaDeTransitoId, nit, razonSocial, direccion);
            this.secretariaDeTransitoRepository.Update(newSecretariaDeTransito);
            return (SecretariaDeTransitoId)newSecretariaDeTransito.Identity;
        }

    }
}
